package com.kitty.game.equip;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.kitty.game.equip.model.RoleEquip;
import com.kitty.game.attribute.config.Attribute;
import com.kitty.game.config.Equip;
import com.kitty.game.equip.model.RoleEquip;
import com.alibaba.fastjson.parser.Feature;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EquipDataPool {

    private static Map<Integer, String> icon2Name;

    private static Map<String, Equip> name2Equip;

    private static Map<String, List<String>> levelPos2Equips;

    public static Map<Short, Attribute> id2Attribute;

    public static Map<String, Short> name2AttribId;

    public static Map<Integer, Map<Integer, Map<Integer, Integer>>> suitDatas;

    public static Map<Short,Map<Byte,Integer>> equipToNimbus;

    public static Map<Integer,Map<Integer,Map<String,Integer>>> newcomerGiftEquips;


    /**
     * 加载套装数据
     */
    public static void loadCommonSet(Map<String, String> commonSetMap) {
        suitDatas = JSON.parseObject(commonSetMap.get("suit_ids"), new TypeReference<Map<Integer, Map<Integer, Map<Integer, Integer>>>>() {});
        equipToNimbus = JSON.parseObject(commonSetMap.get("equip_to_nimbus"), new TypeReference<Map<Short, Map<Byte, Integer>>>() {});
        newcomerGiftEquips =JSON.parseObject(commonSetMap.get("novice_gift_item"), new TypeReference<Map<Integer,Map<Integer,Map<String,Integer>>>>() {});
    }

    /**获取未鉴定装备转换的点化灵气*/
    public static int getEquipToNimbus(RoleEquip roleEquip){
        return equipToNimbus.get(roleEquip.queryLevel()).get(roleEquip.queryEquipPos(false));
    }


    /**获取新手装备数据*/
    public static Map<String,Integer> getNewComerEquipAttrib(int pos ,int level){
        if(level>70 || level ==1){
            return new HashMap<>();
        }
       return newcomerGiftEquips.get(pos).get(level);
    }

    public static void initEquipData(List<Equip> list) {
        Map<Integer, String> icon2NameMap = new HashMap<>();
        Map<String, Equip> name2EquipMap = new HashMap<>();
        Map<String, List<String>> levelPos2EquipsMap = new HashMap<>();
        for (Equip equip : list) {
            icon2NameMap.put(equip.getIcon(), equip.getKey_name());
            name2EquipMap.put(equip.getKey_name(), equip);

            String key = equip.getReq_level() + "_" + equip.getPosition();
            levelPos2EquipsMap.putIfAbsent(key, new ArrayList<>());
            List<String> tmpSets = levelPos2EquipsMap.get(key);
            tmpSets.add(equip.getKey_name());
        }

        icon2Name = icon2NameMap;
        name2Equip = name2EquipMap;
        levelPos2Equips = levelPos2EquipsMap;
    }

    public static Equip getByName(String name) {
        return name2Equip.get(name);
    }

    public static String getNameByIcon(int icon) {
        return icon2Name.get(icon);
    }

    public static List<String> getNamesBy(int level, int position) {
        String key = level + "_" + position;
        return levelPos2Equips.getOrDefault(key, new ArrayList<>());
    }

}
